/* t_md5.cpp : test dgnsc md5
 * Copyright (C) 2009-2012 drangon <drangon.zhou@gmail.com>
 * 2012-05
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <dgnsc/md5.h>

#include "gtest.h"


TEST( md5, md5 )
{
	static struct {
		const char * test;
		const char * md5;
	} s_test_str[] = {
		{ "", "d41d8cd98f00b204e9800998ecf8427e" },
		{ "a", "0cc175b9c0f1b6a831c399e269772661" },
		{ "abc", "900150983cd24fb0d6963f7d28e17f72" },
		{ "message digest", "f96b697d7cb7938d525a2f31aaf161d0" },
		{ "abcdefghijklmnopqrstuvwxyz", "c3fcd3d76192e4007dfb496cca67e13b" },
		{ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 
			"d174ab98d277d9f5a5611c2c9f419d9f" },
		{ "12345678901234567890123456789012345678901234567890123456789012345678901234567890", 
			"57edf4a22be3c955ac49da2e2107b67a" },

		{ NULL, NULL }
	};	

	dgn_md5_t md5 = dgn_md5_init();
	char buf[33];

	int i;
	for( i = 0; s_test_str[i].test != NULL; ++i ) {
		dgn_md5_reset( md5 );
		dgn_md5_pushdata( md5, s_test_str[i].test, strlen( s_test_str[i].test ) );
		dgn_md5_finish( md5 );
		dgn_md5_getstr( md5, buf );

		EXPECT_STRCASEEQ( buf, s_test_str[i].md5 );
	}

	dgn_md5_fini( md5 ), md5 = NULL;
}

